#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 先创建一个菜单栏
//    QMenuBar* menuBar = new QMenuBar();  // 在堆上动态创建，有内存泄漏的风险
    QMenuBar* menuBar = this->menuBar();  // 安全的创建方式
    this->setMenuBar(menuBar);  // 将菜单栏放入窗口中

    // 创建菜单
    QMenu* menu1 = new QMenu("文件(&F)");  // &F，设置快捷键，配合Alt使用
    QMenu* menu2 = new QMenu("编辑(&E)");
    QMenu* menu3 = new QMenu("视图(&V)");
    QMenu* menu4 = new QMenu("关于(&A)");
    // 添加菜单到菜单栏中
    menuBar->addMenu(menu1);
    menuBar->addMenu(menu2);
    menuBar->addMenu(menu3);
    menuBar->addMenu(menu4);

    // 创建菜单项，并将菜单项添加到菜单上
    QAction* action1 = new QAction("新建(&N)");
    QAction* action2 = new QAction("打开(&O)");
    QAction* action3 = new QAction("保存(&S)");
    QAction* action4 = new QAction("退出(&X)");
    menu1->addAction(action1);
    menu1->addAction(action2);
    menu1->addSeparator();  // 添加分割线
    menu1->addAction(action3);
    menu1->addAction(action4);
    QAction* action5 = new QAction("全选(&A)");
    menu2->addAction(action5);

    // 给action添加信号槽
    connect(action1, &QAction::triggered, this, &MainWindow::handle);
    connect(action4, &QAction::triggered, this, &MainWindow::close);

    // 给菜单添加子菜单
    QMenu* menuChild = new QMenu("子菜单(&C)");
    menu3->addMenu(menuChild);
    QAction* action6 = new QAction("菜单项1");
    QAction* action7 = new QAction("菜单项2");
    menuChild->addAction(action6);
    menuChild->addAction(action7);

    // 给子菜单和菜单项设置图标
    action1->setIcon(QIcon(":/image/open.png"));
    action3->setIcon(QIcon(":/image/save.png"));
    menuChild->setIcon(QIcon(":/image/open.png"));
//    menu2->setIcon(QIcon(":/image/open.png"));  // 给菜单设置图标会覆盖文字
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handle()
{
    qDebug() << "触发新建操作";
}

